Imports System.Data.SqlClient
Imports System.ComponentModel
Public Class cls_telepeajepedido_

    Implements ICloneable

#Region "Variables ..."
    Private int_idtelepeajepedido As Integer = 0
    Private int_idproveedor As Integer = 0
    Private str_contacto As String = ""
    Private int_estado As enu_estado = 0
    Private str_observaciones As String = ""
    Private dte_fechapedido As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private dte_fecharecibido As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_idregistro As Integer = 0
    Private int_idpersonal As Integer = 0
    Private str_adjunto As Byte()
    Private str_formulario As String = ""
    Private str_adjuntonombre As String = ""

    Private obj_registro As cls_registro_ = Nothing
    Private obj_proveedor As cls_proveedor_ = Nothing
    Private obj_personal As cls_personal_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_telepeajepedido_) = Nothing

    Public Enum enu_estado
        <Description("Pedido.")> pedido = 0
        <Description("Anulado.")> anulado = 1
        <Description("Entregado.")> entregado = 2
    End Enum

#End Region

#Region "Propiedades ..."
    Property idtelepeajepedido() As Integer
        Get
            idtelepeajepedido = int_idtelepeajepedido
        End Get
        Set(ByVal value As Integer)
            int_idtelepeajepedido = value
        End Set
    End Property
    Property idproveedor() As Integer
        Get
            idproveedor = int_idproveedor
        End Get
        Set(ByVal value As Integer)
            int_idproveedor = value
        End Set
    End Property
    Property contacto() As String
        Get
            contacto = str_contacto
        End Get
        Set(ByVal value As String)
            str_contacto = value
        End Set
    End Property
    Property estado() As enu_estado
        Get
            estado = int_estado
        End Get
        Set(ByVal value As enu_estado)
            int_estado = value
        End Set
    End Property
    Property observaciones() As String
        Get
            observaciones = str_observaciones
        End Get
        Set(ByVal value As String)
            str_observaciones = value
        End Set
    End Property
    Property fechapedido() As DateTime
        Get
            fechapedido = dte_fechapedido
        End Get
        Set(ByVal value As DateTime)
            dte_fechapedido = value
        End Set
    End Property
    Property fecharecibido() As DateTime
        Get
            fecharecibido = dte_fecharecibido
        End Get
        Set(ByVal value As DateTime)
            dte_fecharecibido = value
        End Set
    End Property
    Property idregistro() As Integer
        Get
            idregistro = int_idregistro
        End Get
        Set(ByVal value As Integer)
            int_idregistro = value
        End Set
    End Property
    Property idpersonal As Integer
        Get
            idpersonal = int_idpersonal
        End Get
        Set(ByVal value As Integer)
            int_idpersonal = value
        End Set
    End Property
    Property adjunto() As Byte()
        Get
            adjunto = str_adjunto
        End Get
        Set(ByVal value As Byte())
            str_adjunto = value
        End Set
    End Property
    Property formulario As String
        Get
            formulario = str_formulario
        End Get
        Set(ByVal value As String)
            str_formulario = value
        End Set
    End Property
    Property adjuntonombre As String
        Get
            adjuntonombre = str_adjuntonombre
        End Get
        Set(ByVal value As String)
            str_adjuntonombre = value
        End Set
    End Property
    Property registro() As cls_registro_
        Get
            If IsNothing(obj_registro) Then
                obj_registro = New cls_registro_
                If Not obj_registro.Buscar(idregistro) Then
                    obj_registro = Nothing
                End If
            End If
            registro = obj_registro
        End Get
        Set(ByVal value As cls_registro_)
            obj_registro = value
        End Set
    End Property
    Property proveedor() As cls_proveedor_
        Get
            If IsNothing(obj_proveedor) Then
                obj_proveedor = New cls_proveedor_
                If Not obj_proveedor.Buscar(idproveedor) Then
                    obj_proveedor = Nothing
                End If
            End If
            proveedor = obj_proveedor
        End Get
        Set(ByVal value As cls_proveedor_)
            obj_proveedor = value
        End Set
    End Property
    Property personal() As cls_personal_
        Get
            If IsNothing(obj_personal) Then
                obj_personal = New cls_personal_
                If Not obj_personal.Buscar(idpersonal) Then
                    obj_personal = Nothing
                End If
            End If
            personal = obj_personal
        End Get
        Set(ByVal value As cls_personal_)
            obj_personal = value
        End Set
    End Property
    Property Items() As Collections.Generic.List(Of cls_telepeajepedido_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_telepeajepedido_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_telepeajepedido_)
        While obj_Reader.Read()
            Dim Elemento As New cls_telepeajepedido_
            Elemento.int_idtelepeajepedido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtelepeajepedido")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproveedor"))) = False Then
                Elemento.int_idproveedor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproveedor")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("contacto"))) = False Then
                Elemento.str_contacto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("contacto")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
                Elemento.int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
                Elemento.str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechapedido"))) = False Then
                Elemento.dte_fechapedido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechapedido")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibido"))) = False Then
                Elemento.dte_fecharecibido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibido")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
                Elemento.int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal"))) = False Then
                Elemento.int_idpersonal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal")))
            End If
            Try
                If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto"))) = False Then
                    Elemento.str_adjunto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto")))
                End If
            Catch ex As Exception
            End Try
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("formulario"))) = False Then
                Elemento.str_formulario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("formulario")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntonombre"))) = False Then
                Elemento.str_adjuntonombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntonombre")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idtelepeajepedido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtelepeajepedido")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproveedor"))) = False Then
            int_idproveedor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproveedor")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("contacto"))) = False Then
            str_contacto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("contacto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
            int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
            str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechapedido"))) = False Then
            dte_fechapedido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechapedido")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibido"))) = False Then
            dte_fecharecibido = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharecibido")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
            int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal"))) = False Then
            int_idpersonal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal")))
        End If
        Try
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto"))) = False Then
                str_adjunto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto")))
            End If
        Catch ex As Exception
        End Try
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("formulario"))) = False Then
            str_formulario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("formulario")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntonombre"))) = False Then
            str_adjuntonombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntonombre")))
        End If
    End Sub

    Public Sub Nuevo(Optional ByVal ObtenerID As Boolean = False)
        Dim obj_Conexion As New cls_Conexion
        Try

            'Creacion de registro----------------------------------------------------
            If IsNothing(obj_registro) Then
                registro = New cls_registro_
                registro.fechacreado = Now
                registro.idusuariocreado = UsuarioLOG.idusuario
                registro.fechamodificado = Now
                registro.idusuariomodificado = UsuarioLOG.idusuario
                registro.idregistroestado = 1
                registro.idusuarioregistroestado = UsuarioLOG.idusuario
                registro.Nuevo(True)
                idregistro = obj_registro.idregistro
            End If
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__Nuevo"
                .Parameters.Add("@idproveedor", SqlDbType.Int).Value = int_idproveedor
                .Parameters.Add("@contacto", SqlDbType.NVarChar).Value = str_contacto
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@fechapedido", SqlDbType.DateTime).Value = dte_fechapedido
                .Parameters.Add("@fecharecibido", SqlDbType.DateTime).Value = dte_fecharecibido
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idpersonal", SqlDbType.Int).Value = int_idpersonal
                .Parameters.Add("@adjunto", SqlDbType.Image).Value = IIf(IsNothing((str_adjunto)), DBNull.Value, str_adjunto)
                .Parameters.Add("@formulario", SqlDbType.NVarChar).Value = str_formulario
                .Parameters.Add("@adjuntonombre", SqlDbType.NVarChar).Value = str_adjuntonombre
                .ExecuteNonQuery()
            End With
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Crear el registro de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            'Modificacion de registro------------------------------------------------
            registro.fechamodificado = Now : registro.idusuariomodificado = UsuarioLOG.idusuario
            registro.Modificar()
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__Modificar"
                .Parameters.Add("@idtelepeajepedido", SqlDbType.Int).Value = int_idtelepeajepedido
                .Parameters.Add("@idproveedor", SqlDbType.Int).Value = int_idproveedor
                .Parameters.Add("@contacto", SqlDbType.NVarChar).Value = str_contacto
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@fechapedido", SqlDbType.DateTime).Value = dte_fechapedido
                .Parameters.Add("@fecharecibido", SqlDbType.DateTime).Value = dte_fecharecibido
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idpersonal", SqlDbType.Int).Value = int_idpersonal
                .Parameters.Add("@adjunto", SqlDbType.Image).Value = IIf(IsNothing((str_adjunto)), DBNull.Value, str_adjunto)
                .Parameters.Add("@formulario", SqlDbType.NVarChar).Value = str_formulario
                .Parameters.Add("@adjuntonombre", SqlDbType.NVarChar).Value = str_adjuntonombre
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Modificar el registro de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idtelepeajepedido As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__Eliminar"
                .Parameters.Add("@idtelepeajepedido", SqlDbType.Int).Value = idtelepeajepedido
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Eliminar el registro de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idtelepeajepedido As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__Buscar"
                .Parameters.Add("@idtelepeajepedido", SqlDbType.Int).Value = idtelepeajepedido
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Buscar el registro de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarUltimo registro de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos(Optional ByVal idregistroestado As Integer = 1) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "telepeajepedido__CargarTodos"
                .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarTodos los registros de telepeajepedido_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_telepeajepedido_Clon As New cls_telepeajepedido_
        obj_telepeajepedido_Clon.int_idtelepeajepedido = Me.int_idtelepeajepedido
        obj_telepeajepedido_Clon.int_idproveedor = Me.int_idproveedor
        obj_telepeajepedido_Clon.str_contacto = Me.str_contacto
        obj_telepeajepedido_Clon.int_estado = Me.int_estado
        obj_telepeajepedido_Clon.str_observaciones = Me.str_observaciones
        obj_telepeajepedido_Clon.dte_fechapedido = Me.dte_fechapedido
        obj_telepeajepedido_Clon.dte_fecharecibido = Me.dte_fecharecibido
        obj_telepeajepedido_Clon.int_idregistro = Me.int_idregistro
        obj_telepeajepedido_Clon.col_Items = Me.col_Items
        Return obj_telepeajepedido_Clon
    End Function

End Class
